package com.caifu.service;

import com.caifu.bean.Result;
import com.caifu.excel.ExcelElderlyInfo;
import com.caifu.pojo.*;
import com.caifu.vo.*;

import java.util.List;
import java.util.Map;

/**
 * ClassName : UserInfoController
 *
 * @author :  yb
 * @description ：
 * @date : 2020-11-06 15:07
 */
public interface ElderlyInfoService {

    /**
     * 获取现住老人-列表
     *
     * @param vo vo
     * @return Result
     */
    Result<Object> getElderlyInfoPageList(ElderlyInfoVO vo);

    /**
     * 获取 敬老院入住老人明细表 数据
     *
     * @param vo vo
     * @return Result
     */
    List<ExcelElderlyInfo> getElderlyInfoReportData(ElderlyInfoVO vo);


    /**
     * 验证新增老人时候  身份证号是否存在
     *
     * @param userPid userPid
     * @return Result
     * @throws Exception Exception
     */
    Result<Object> isExistForUserPid(String userPid) throws Exception;

    /**
     * 获取添加老人页面需要的一些数据
     *
     * @return Map
     */
    Map<String, Object> getAddPageOfElderlyInfoData();

    /**
     * 获取护理人员
     *
     * @param ylStaffInfoVo ylStaffInfoVo
     * @return List
     */
    Result<Object> getYlStaffInfoList(YlStaffInfoVo ylStaffInfoVo);


    /**
     * 保存老人信息
     *
     * @param elderlyInfoAddVO elderlyInfoVo
     * @return Result
     * * @throws Exception Exception
     */
    Result<Object> saveYlElderlyInfo(ElderlyInfoAddVO elderlyInfoAddVO) throws Exception;

    /**
     * 删除 老人
     *
     * @param userNo userNo
     * @return Result
     * @throws Exception Exception
     */
    Result<Object> deleteYlElderlyInfo(String userNo) throws Exception;


    /**
     * 获取当前养老院的楼苑列表
     *
     * @param pensionNo pensionNo
     * @return List
     */
    List<YlBuilding> getBuildingListByPensionNo(String pensionNo);

    /**
     * 获取楼层信息
     *
     * @param buildingNo buildingNo
     * @return Result
     */
    Result<Object> getFloorByBuildingNo(String buildingNo);

    /**
     * 获取房屋信息
     *
     * @param floorNo floorNo
     * @return Result
     */
    Result<Object> getRoomByFloorNo(String floorNo);

    /**
     * 获取床位信息
     *
     * @param roomNo roomNo
     * @return Result
     */
    Result<Object> getBedByRoomNo(String roomNo);

    /**
     * 获取标签信息
     *
     * @param parentCode parentCode
     * @return YsLabel
     */
    List<YsLabel> getYsLabelListByParentCode(String parentCode);

    /**
     * 获取 老人 信息
     *
     * @param userNo userNo
     * @return Map
     * @throws Exception Exception
     */
    Map<String, Object> getElderlyInfoDetailByUserNo(String userNo) throws Exception;

    /**
     * 获取 老人 信息
     *
     * @param userNo userNo
     * @return YlElderlyInfo
     * @throws Exception Exception
     */
    YlElderlyInfo getElderlyInfoByUserNo(String userNo) throws Exception;

    /**
     * 通过 userNo 修改老人信息
     *
     * @param elderlyInfoUpdateVO elderlyInfoUpdateVO
     * @return Result
     * @throws Exception Exception
     */
    Result<Object> updateYlElderlyInfoByUserNo(ElderlyInfoUpdateVO elderlyInfoUpdateVO) throws Exception;


    /**
     * 修改 老人 费用信息
     *
     * @param ylElderlyInfo ylElderlyInfo
     * @return Result
     */
    Result<Object> updateYlElderlyInfoFee(YlElderlyInfo ylElderlyInfo);

    /**
     * 修改 老人 入驻合同
     *
     * @param infoUpdateContractVO infoUpdateContractVO
     * @return Result
     */
    Result<Object> updateYlElderlyInfoContract(ElderlyInfoUpdateContractVO infoUpdateContractVO);

    /**
     * 修改 老人 入驻合同----续签合同
     *
     * @param infoUpdateContractVO infoUpdateContractVO
     * @return Result
     */
    Result<Object> updateYlElderlyInfoContractOfRenewal(ElderlyInfoUpdateContractVO infoUpdateContractVO);

    /**
     * 修改 老人 房间信息
     *
     * @param infoUpdateBuildingRoomBedVO infoUpdateBuildingRoomBedVO
     * @return Result
     */
    Result<Object> updateYlElderlyInfoBuildingRoomBed(ElderlyInfoUpdateBuildingRoomBedVO infoUpdateBuildingRoomBedVO);

    /**
     * 修改 老人 护理等级
     *
     * @param nursingRecord nursingRecord
     * @return Result
     */
    Result<Object> updateYlElderlyInfoNursing(YlNursingRecord nursingRecord);

    /**
     * 修改 老人 长护险
     *
     * @param assessmentRecord assessmentRecord
     * @return Result
     */
    Result<Object> updateYlElderlyInfoAssessment(YlAssessmentRecord assessmentRecord);

    /**
     * 老人 退住
     *
     * @param ylElderlyInfo ylElderlyInfo
     * @return Result
     */
    Result<Object> updateElderlyForIsStayBack(YlElderlyInfo ylElderlyInfo);

    /**
     * 获取入驻合同 历史记录
     *
     * @param userNo userNo
     * @return Result
     */
    Result<Object> getHistoryContractList(String userNo);

    /**
     * 获取床位记录 历史
     *
     * @param userNo userNo
     * @return Result
     */
    Result<Object> getHistoryBedRecordList(String userNo);

    /**
     * 获取护理等级记录 历史
     *
     * @param userNo userNo
     * @return Result
     */
    Result<Object> getHistoryNursingRecordList(String userNo);


    /**
     * 长护险评估信息历史记录
     * @param userNo userNo
     * @return Result
     */
    Result<Object> getHistoryAssessmentRecordList(String userNo);


    /**
     * 获取 YlCost
     * @param costNo costNo
     * @return Result
     */
    Result<Object> getCost(String costNo);

    /**
     * 计算是否生效 通过生效时间   ---床位记录
     * @param userNo userNo
     */
    void updateBedRecordByEffectDate(String userNo);


    /**
     * 计算是否生效 通过生效时间   --- 护理记录
     * @param userNo userNo
     */
    void updateNursingRecordByEffectDate(String userNo);

    /**
     *  计算是否生效 通过生效时间   --- 评估记录
     * @param userNo userNo
     */
    void updateAssessmentRecordByEffectDate(String userNo);


}
